package logger

import "go.uber.org/zap"

func SugarInfow(logger *zap.Logger) {
	//logger, _ := zap.NewProduction() //用于生产环境
	//logger, _ := zap.NewDevelopment() //用于测试环境
	defer logger.Sync() // 确保日志缓冲区的内容在程序结束前被刷新

	// 使用 Sugar 语法糖封装的日志对象，提供更简洁的日志 API
	sugar := logger.Sugar()

	// 结构化日志（推荐）：使用键值对方式记录日志，便于搜索和分析
	sugar.Infow("用户信息",
		"name", "likaladi", // 记录用户姓名
		"url", "http://likaladi.com", // 记录用户的 URL
		"age", 36, // 记录用户年龄
	)
	//输出结果：
	//{"level":"info","ts":1740412086.245012,"caller":"user-web/main.go:16","msg":"用户信息","name":"likaladi","url":"http://likaladi.com","age":36}
}

func SugarInfof(logger *zap.Logger) {
	//logger, _ := zap.NewProduction() //用于生产环境
	//logger, _ := zap.NewDevelopment() //用于测试环境
	defer logger.Sync() // 确保日志缓冲区的内容在程序结束前被刷新

	// 使用 Sugar 语法糖封装的日志对象，提供更简洁的日志 API
	sugar := logger.Sugar()
	// 格式化日志（适用于传统日志记录方式，但不推荐结构化日志使用）
	sugar.Infof("用户信息=>name:%s, url:%s, age:%d", "likaladi", "http://likaladi.com", 36)
	//输出结果：
	//{"level":"info","ts":1740412086.2455285,"caller":"user-web/main.go:23","msg":"用户信息=>name:likaladi, url:http://likaladi.com, age:36"}
}

// CreateLogger 创建一个日志实例，并将日志写入指定文件
func CreateLogger() (*zap.Logger, error) {
	// 创建一个生产环境的日志配置
	cfg := zap.NewProductionConfig()

	// 设置日志的输出路径
	// 这里指定日志写入本地文件 "./myproject.log"
	// 还可以添加 "stdout" 让日志同时输出到终端
	cfg.OutputPaths = []string{
		"./myproject.log", // 指定日志文件路径， 该路径以当前go.mod文件路径为主, 即. 代表当前文件所在目录，即shop-web
		"stderr",          // 将日志输出到标准错误（stderr），通常用于错误日志监控
		"stdout",          // 将日志输出到标准输出（stdout），方便在终端查看日志
	}

	// 根据配置创建并返回 zap.Logger 实例
	return cfg.Build()
}
